package com.tbit.uqbike.service.business;

import com.baomidou.mybatisplus.extension.service.IService;
import com.tbit.uqbike.object.pojo.InvoiceRecord;
import com.tbit.uqbike.object.pojo.vo.InvoiceRecordVO;
import com.tbit.common.entity.view.PageResult;
import com.tbit.common.entity.view.Result;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;
import java.util.List;

/**
 * @author yee_
 * @version 1.0
 * @date 2023/8/7 14:30
 */
public interface InvoiceRecordService extends IService<InvoiceRecord> {

    /**
     * 分页查询
     *
     * @param phone     。
     * @param email     。
     * @param status    。
     * @param startTime 。
     * @param endTime   。
     * @param brandId   。
     * @param flowId    。
     * @param page      。
     * @param size      。
     * @return 。
     */
    PageResult<InvoiceRecord> listPage(String phone, String email, Integer status, Long startTime, Long endTime,
                                       Integer brandId, String flowId, Integer page, Integer size);

    /**
     * 根据记录 id 查询 发票详情
     *
     * @param invoiceId 记录 id
     * @return 发票详情
     */
    Result<InvoiceRecordVO> detail(Integer invoiceId);

    /**
     * 发票审核
     *
     * @param invoiceId     发票申请id
     * @param auditStatus   审核结果 true-通过 false-驳回
     * @param invoiceNumber 发票单号
     * @param files         发票pdf文件
     * @param remark        备注
     * @return 处理结果
     */
    Result<String> audit(Integer invoiceId, Boolean auditStatus, String invoiceNumber, MultipartFile files, String remark);

    /**
     * 发票重开审核
     *
     * @param invoiceId   发票申请id
     * @param auditStatus 审核结果 true-通过 false-驳回
     * @return 处理结果
     */
    Result<String> discard(Integer invoiceId, Boolean auditStatus);

    /**
     * 修改邮箱
     *
     * @param invoiceId 。
     * @param email     。
     * @return 。
     */
    Result<String> updateEmail(Integer invoiceId, String email);

    /**
     * 根据订单编号查询,订单是否已开具发票
     *
     * @param orderNo 订单编号
     * @return 。
     */
    Result<Boolean> queryOrderHasBeenInvoicedByOrderNo(String orderNo);

    /**
     * 根据用户id和品牌id查询
     *
     * @param userId    用户id
     * @param brandId   品牌id
     * @param startTime 开始时间
     * @param endTime   结束时间
     */
    List<InvoiceRecord> selectList(Integer userId, Integer brandId, Date startTime, Date endTime);

    /**
     * @description: 重新自动开票
     * @author: mo.shanyong
     * @date: 2025/4/7 11:49
     * @param: invoiceRecord 旧发票
     */
    void reAutoInvoicing(Integer invoiceId);
}
